package com.itheima.d4_map;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

/**
 * 目标：掌握Map集合的特点。
 *
 * Map集合称为双列集合，格式：{key1=value1 , key2=value2 , key3=value3 , ...}， 一次需要存一对数据做为一个元素.
 * Map集合的每个元素“key=value”称为一个键值对/键值对对象/一个Entry对象，Map集合也被叫做“键值对集合”
 * Map集合的所有键是不允许重复的，但值可以重复，键和值是一一对应的，每一个键只能找到自己对应的值
 *
 * 需要存储一一对应的数据时，就可以考虑使用Map集合来做
 *
 * Map<K , V>:
 *      map是一个泛型接口，k表示键的类型，v表示要声明的值的类型
 *
 * Map集合体系的特点
 * 注意：Map系列集合的特点都是由键决定的，值只是一个附属品，值是不做要求的
 * HashMap（由键决定特点）: 无序、不重复、无索引；  （用的最多）
 * LinkedHashMap （由键决定特点）:由键决定的特点：有序、不重复、无索引。继承HashMap
 * TreeMap （由键决定特点）:按照大小默认升序排序、不重复、无索引。
 */
public class MapTest1 {
    public static void main(String[] args) {
        // 一行经典代码。 按照键决定的特点 无序，不重复，无索引。
        // Map<String, Integer> map = new HashMap<>();  //{null=null, 手表=220, Java=2, 手机=2}

        // 有序，不重复，无索引。
        Map<String, Integer> map = new LinkedHashMap<>();   //{手表=220, 手机=2, Java=2, null=null}
        map.put("手表", 100);
        map.put("手表", 220); // 后面重复的数据会覆盖前面的数据（键）
        map.put("手机", 2);
        map.put("Java", 2);
        map.put(null, null);
        System.out.println(map);    //输出的是map集合的内容，说明重写了tostring方法
        map.put("洪哥",25);
        System.out.println(map);

        Map<Integer, String> map1 = new TreeMap<>(); // 可排序，不重复，无索引
        map1.put(23, "Java");
        map1.put(23, "MySQL");
        map1.put(19, "李四");
        map1.put(20, "王五");
        System.out.println(map1);

        Map<Double,Character> zengjihong = new HashMap<>();
        zengjihong.put(5.2,'z');
        zengjihong.put(7.7,'j');
        zengjihong.put(6.6,'h');
        System.out.println(zengjihong);
        System.out.println(zengjihong);

        Character a1 = zengjihong.get(5.2);
        System.out.println(a1);

    }
}
